#!/bin/bash

# MinIO服务的URL
MINIO_URL="minio://minio.example.com:9000"

# MinIO的访问密钥
MINIO_ACCESS_KEY="your-access-key"

# MinIO的私密密钥
MINIO_SECRET_KEY="your-secret-key"

# MinIO的桶名称
BUCKET_NAME="your-bucket-name"

# MinIO配置的名称
MINIO_CONFIG_NAME="myminio"

# 函数：检查并配置mc客户端
# 入参：无
# 出参：无
configure_mc() {
    # 检查是否已经配置过该主机
    if mc config host list | grep -q "$MINIO_CONFIG_NAME"; then
        # 如果已存在，则更新配置
        mc config host update "$MINIO_CONFIG_NAME" "$MINIO_URL" "$MINIO_ACCESS_KEY" "$MINIO_SECRET_KEY" --api "s3v4"
        echo "MinIO配置已更新。"
    else
        # 如果不存在，则添加配置
        mc config host add "$MINIO_CONFIG_NAME" "$MINIO_URL" "$MINIO_ACCESS_KEY" "$MINIO_SECRET_KEY" --api "s3v4"
        echo "MinIO配置已添加。"
    fi
}

# 函数：上传到MinIO
# 入参：
#   $1 - local_dir: 本地目录路径
#   $2 - minio_dir: MinIO目标目录路径
# 出参：无
upload_to_minio() {
    local local_dir="$1"
    local minio_dir="$2"
    mc cp --recursive "$local_dir" "$MINIO_CONFIG_NAME/$BUCKET_NAME/$minio_dir"
    echo "上传完成：$local_dir 到 $MINIO_CONFIG_NAME/$BUCKET_NAME/$minio_dir"
}

# 函数：从MinIO下载
# 入参：
#   $1 - minio_dir: MinIO源目录路径
#   $2 - local_dir: 本地目标目录路径
# 出参：无
download_from_minio() {
    local minio_dir="$1"
    local local_dir="$2"
    mc cp --recursive "$MINIO_CONFIG_NAME/$BUCKET_NAME/$minio_dir" "$local_dir"
    echo "下载完成：$MINIO_CONFIG_NAME/$BUCKET_NAME/$minio_dir 到 $local_dir"
}

# 主函数：根据参数选择操作
# 入参：
#   $1 - operation: 操作类型 ("upload" 或 "download")
#   $2 - local_dir: 本地目录路径
#   $3 - minio_dir: MinIO目录路径
# 出参：无
main() {
    if [[ "$#" -ne 3 ]]; then
        echo "用法: $0 [upload|download] 本地目录 MinIO目录"
        exit 1
    fi

    local operation="$1"
    local local_dir="$2"
    local minio_dir="$3"

    # 配置mc客户端
    configure_mc

    # 根据操作执行上传或下载
    if [[ "$operation" == "upload" ]]; then
        upload_to_minio "$local_dir" "$minio_dir"
    elif [[ "$operation" == "download" ]]; then
        download_from_minio "$minio_dir" "$local_dir"
    else
        echo "无效的操作。请使用 'upload' 或 'download'。"
        exit 1
    fi
}

# 调用主函数
main "$@"
